/*******************************************************************\
| Material.h
|
| CREATED:		25.5.2009
| DESCRIPTION:
| 
| Material description class
\********************************************************************/
#ifndef MATERIAL_H
#define MATERIAL_H

#include "Color.h"

namespace PhotonMapping
{

//*****************************************************************************
// class overview:
//   Material class
//-----------------------------------------------------------------------------
class Material
{
	public:
		Material(const float p_SpecularPower, const Color& p_DiffReflection, 
				 const Color& p_SpecReflection, const Color& p_Refraction, 
				 const float p_RefractionIndex, const Color& p_Absorption)
			: m_SpecularPower(p_SpecularPower), m_SpecReflection(p_SpecReflection), 
			  m_DiffReflection(p_DiffReflection), m_Refraction(p_Refraction), 
			  m_RefractionIndex(p_RefractionIndex), m_Absorption(p_Absorption)
		{ }

	public:
		const float GetSpecularPower() const { return m_SpecularPower; }
		const Color GetDiffReflection() const { return m_DiffReflection; }
		const Color GetSpecReflection() const { return m_SpecReflection; }
		const Color GetRefraction() const { return m_Refraction; }
		const float GetRefractionIndex() const { return m_RefractionIndex; }
		const Color GetAbsorption() const { return m_Absorption; }

	private:
		const float m_SpecularPower;	
		const Color m_DiffReflection;
		const Color m_SpecReflection;
		const Color m_Refraction;
		const float m_RefractionIndex;
		const Color m_Absorption;
};

// define pointer type
typedef std::tr1::shared_ptr<Material> MaterialPtr;

} // namespace PhotonMapping

#endif // MATERIAL_H
